/**
 * normalize.js
 * 将Prism.js的token数组标准化为可用于渲染的格式
 */

/**
 * 标准化Prism.js的token数组
 * @param {Array} tokens - Prism.js生成的token数组
 * @returns {Array} 标准化后的token行数组
 */
function normalize(tokens) {
  if (!tokens || !Array.isArray(tokens)) {
    return [];
  }

  const lines = [];
  let currentLine = [];

  function processToken(token) {
    if (typeof token === 'string') {
      // 处理纯文本token
      const parts = token.split('\n');
      for (let i = 0; i < parts.length; i++) {
        if (i > 0) {
          // 遇到换行符，结束当前行
          lines.push(currentLine);
          currentLine = [];
        }
        if (parts[i]) {
          currentLine.push({
            type: 'text',
            content: parts[i]
          });
        }
      }
    } else if (token && typeof token === 'object') {
      // 处理Token对象
      const content = token.content;
      if (Array.isArray(content)) {
        // 递归处理嵌套token
        content.forEach(processToken);
      } else if (typeof content === 'string') {
        const parts = content.split('\n');
        for (let i = 0; i < parts.length; i++) {
          if (i > 0) {
            // 遇到换行符，结束当前行
            lines.push(currentLine);
            currentLine = [];
          }
          if (parts[i]) {
            currentLine.push({
              type: token.type || 'text',
              content: parts[i]
            });
          }
        }
      }
    }
  }

  tokens.forEach(processToken);
  
  // 添加最后一行
  if (currentLine.length > 0) {
    lines.push(currentLine);
  }

  // 确保至少有一行
  if (lines.length === 0) {
    lines.push([]);
  }

  return lines;
}

// 导出函数
module.exports = {
  default: normalize,
  normalize: normalize
};